package com.learn.job.timer;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.time.LocalDateTime;
import java.util.Timer;
import java.util.TimerTask;

/**
 * <p>
 * Timer 是 JDK 自带的定时任务执行类，无论任何项目都可以直接使用 Timer 来实现定时任务，
 * 所以 Timer 的优点就是使用方便。但不能在指定时间运行。任务如果执行时间太长或者是任务执行异常，
 * 会影响其他任务调度，所以在生产环境下建议谨慎使用。它的实现代码如下：
 * </p>
 *
 * @author: cong zhi
 * @createDate: 2023/10/20 23:14
 * @updateUser: cong zhi
 * @updateDate: 2023/10/20 23:14
 * @updateRemark: 修改内容
 * @version: v1.0
 */
@Slf4j
@Component
public class ExampleTimerTask {

    // 定义任务调度器实例对象
    private static final Timer timer = new Timer();

    @PostConstruct
    public void task() {
        // 定义一个定时任务
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                log.info("-------------> 调度线程名称：[{}]，被调度方法名称：[ExampleTimerTask.task()]，执行频率：5秒/次，当前时间：[{}]", Thread.currentThread().getName(), LocalDateTime.now());
                System.out.println("定时任务TimerTask执行:" + System.currentTimeMillis());
            }
        };

        // 添加执行任务（延迟 1s 执行，每 5s 执行一次）
        timer.schedule(timerTask, 1000, 5000);
    }
}
